package main

import "fmt"

//使用无缓冲的chan 模拟 semaphore
func main() {

	c := make(chan int)
	done := make(chan bool)

	go func() {
		for i := 0; i < 10; i++ {
			c <- i
		}
		done <- true //输入完成信号
	}()

	go func() {
		for i := 10; i < 20; i++ {
			c <- i
		}
		done <- true //输入完成信号
	}()

	go func() {
		fmt.Println("done wait ...")
		<-done //等待信号
		<-done //等待信号
		close(c)
		fmt.Println("close chan c")
	}()

	for v := range c {
		fmt.Println("from chan c: ", v)
	}

}
